public class Poly03 {
    public static void main(String[] args) {
//        向上转型
        AAAA aaaa= new BBBB("zhangsan",20);

        System.out.println(aaaa.age);
//        向上转型后会打印父类的num1属性值，不能打印子类的属性值
        System.out.println(aaaa.num1);
        BBBB bbbb=(BBBB) aaaa;
//        向下转型后会打印出子类的num1属性值
        System.out.println(bbbb.num1);
        System.out.println(bbbb.num2);
//        bbbb的类或者父类是否是AAAA
        System.out.println(bbbb instanceof AAAA);
//        aaaa的类或者父类是否是AAAA
        System.out.println(aaaa instanceof AAAA);
        System.out.println(aaaa instanceof BBBB);

        double d=13.4;
        long l=(long) d;
        System.out.println(l);
        int in=5;
//        不允许
//        boolean b=(Boolean) in;
        Object obj="hello";
        String str=(String) obj;
        System.out.println(str);
//        向上转型
        Object objint=new Integer(5);
        System.out.println(objint);
//        错误的引用,执行Integer的父类引用，转成String
//                String str2=(String) objint;
        Integer integer=(Integer) objint;
        System.out.println(integer);
        System.out.println("动态绑定机制");
//        1、当调用对象方法的时候，该方法会和该对象的内存地址/运行类型绑定
//        2、当调用对象属性时，没有动态绑定机制，哪里有声明，哪里就使用
        A11 a=new B11();
        System.out.println(a.getI());
        System.out.println(a.i);
        System.out.println(a.sum());
    }
}
